ASP.NET MVC Controllers
Home

ASP.NET MVC Controllers

ASP.NET MVC Controllers

Een controller reageert op input van de gebruiker (bijvoorbeeld een gebruiker klikt op een knop Opslaan) en staat tussen het model en de view. In een ASP.NET MVC applicatie controllers zijn klassen die methoden die worden genoemd door de routing kader om een aanvraag te verwerken bevatten.

Als voorbeeld van een ASP.NET MVC controller nemen we de HomeController klasse in Controllers / HomeController.cs:

namespace LerenWerkenMetMVC.Controllers
{
   public class HomeController : Controller
   {

   public ActionResult Index()
   {
      return View();
   }

   public ActionResult About()
   {
      ViewBag.Message = "Your application description page.";
      return View();
   }

   public ActionResult Contact()
   {
      ViewBag.Message = "Your contact page.";
      return View();
   }
}

Controller Actions

Controller klassen zijn gewone .NET klasse. De methoden in de controller klassen - aangeduid als controller acties - handelen de request af. De termen controller en controller actie worden vaak door elkaar gebruikt. Dit komt omdat het MVC patroon maakt geen onderscheid maakt tussen de twee. Maar het ASP.NET MVC Framework is vooral bezig met controller acties, omdat ze de feitelijke logica bevatten om de requests te verwerken.

Bijvoorbeeld, de HomeController klasse van daarnet bevat drie acties:

  1. Index
  2. About
  3. Contact

Dus volgens het standaardroute patroon {controller} / {actie} / {id}, wordt een request naar een URL/Home/About door het routing framework de About() methode van de HomeController klasse gestuurd die de request afhandelt.

De methode About() is vrij eenvoudig: de methode geeft gegevens door aan de view via de eigenschap ViewBag (daarover later meer), en vertelt het ASP.NET MVC framework om de view met naam "About" weer te geven door de methode view () op te roepen, die een ActionResult van het type ViewResult retourneert.

Action Results

Het is belangrijk in te zien dat het de taak van de controller is aan het ASP.NET MVC Framework vertellen wat de volgende stap moet zijn, maar niet hoe dat gedaan moet worden. Deze communicatie vindt plaats door middel van ActionResult's, de geretourneerde waarden van elke controller-actie. Bijvoorbeeld, wanneer een controller besluit om een weergave te openen, vertelt het aan het ASP.NET MVC framework om de view te tonen door het retourneren van een ViewResult. De controller geeft de view niet zelf weer. Deze losse koppeling is een ander goed voorbeeld van het separation of concerns patroon in actie (wat te doen versus hoe het moet worden gedaan).

Elke controller-actie moet een ActionResult retourneren maar je zal zelden handmatig een ActionResult creëren. Je zal in de praktijk meestal een beroep doen op de helper methoden die de System.Web.Mvc.Controller basisklasse biedt:

Content()
retoruneert een ContentResult die om het even welke tekst weergeeft, bijvoorbeeld, "Hello World!"

File()
retoruneert een FileResult dat de inhoud van een bestand weergeeft bijvoorbeeld, een PDF bestand

HttpNotFound()
retourneert een HttpNotFoundResult die een 404 HTTP status code response weergeeft

JavaScript()
retoruneert een JavaScriptResult die JavaScript weergeeft, bijvoorbeeld, "function hello() { alert( Hello, World! ); }".

Json()
Returns a JsonResult serialiseert een object en geeft in JavaScript Object Notation (JSON) formaat weer, bijvoorbeeld, "{ “Message”: Hello, World! }"

PartialView()
retourneert een PartialViewResult die de inhoud van een view weergeeft zonder de lay-out

Redirect()
retourneert een RedirectResult die een 302 (tijdelijke) status code weergeeft om de gebruiker om te leiden naar een bepaalde URL, bijvoorbeeld "302 http://www.modernways.com/books/recent". Deze methode heeft aanverwante methode, RedirectPermanent(), die ook resulteert in een RedirectResult, maar gebruik maakt van HTTP-status code om een permanente redirect in plaats van een tijdelijke weer te geven

RedirectToAction() en RedirectToRoute()
Werkt net als de Redirect() helper, maar het framework bepaalt dynamisch de externe URL door de routing engine te bevragen. Net als de Redirect() helper, hebben deze twee helpers ook permanente redirect varianten: RedirectToActionPermanent() en RedirectToRoutePermanent().

View ()
retoruneert een ViewResult die eeb view weergeeft

Action Parameters

Controller acties zijn eigenlijk methoden zoals een ander. Maar een controller action kan parameters opgeven die ingevuld worden door ASP.NET MVC die de waarden ophaalt uit de request. Deze functionaliteit heet model binding, en het is één van ASP.NET MVC's meest krachtige en handige functies.

Om model binding goed te begrijpen is het goed te kijken hoe de interactie met de request voordien gebeurde:

public ActionResult Create ()
{
   var book = new Book()
   {
      Title = Request["title"],
      CurrentPrice = Decimal.Parse(Request["currentPrice"]),
      Author = Request ["author"]),
      PurchaseDate = DateTime.Parse(Request["purchaseDate" ]),
      //...
   };
}

In het vorig voorbeeld worden de eigenschappen van het Book object ingesteld met waarden die rechtstreeks uit de request worden gehaald. In de request staan de waarden als string. Ze moeten dus eerst omgezet worden naar het juiste gegevensgevenstype van de eigenschappen in het Book object. En dat op een veilige manier zodat het programma niet vastloopt met bijvoorbeeld de TryParse methode.

Model Binding

Met model binding moet je deze expliciete code niet meer zelf schrijven. De conversie, checken voor null waarden enz. wordt door het framework gedaan. Bijvoorbeeld, dezelfde controller actie als hierboven maar nu met behulp van model binding methode parameters:

public ActionResult Create (
   string title ,
   decimal currentPrice ,
   string author,
   DateTime purchaseDate)
   {
      var auction = new Book()
​      {
         Title = title,
         CurrentPrice = currentPrice,
         Author = author,
         PurchaseDate = purchaseDate;
      };
   }​

In plaats van de waarden op te halen uit de request, declareert de action ze als parameters. Wanneer het ASP.NET MVC framework deze methode uitvoert, wordt geprobeerd de parameters van de actie in te stellen met dezelfde waarden van het request zoals in het vorige voorbeeld.

Let erop dat alhoewel we de dictionary Request niet rechtstreeks uitlezen, de parameternamen nog steeds erg belangrijk zijn. De namen van de parameters moeten overeenkomen met de waarden uit de request. Het object Request is niet de enige plek waar de ASP.NET MVC model binder haar waarden uit haalt, echter. Het framework zoekt op verschillende plaatsen, zoals:

JI
2016-11-06 16:45:32